前端那些事

vuePress-theme-reco chenpeng    2020 - 2021
前端那些事 前端那些事

Choose mode

  • dark
  • auto
  • light
首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
author-avatar

chenpeng

85

Article

25

Tag

首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
  • Network

    • TCP三次握手与四次挥手
    • HTTPS
    • OSI参考模型
    • HTTP各版本
    • TCP与UDP

TCP与UDP

vuePress-theme-reco chenpeng    2020 - 2021

TCP与UDP

chenpeng 2021-04-30 TCP

# TCP 与 UDP 的比较

TCP UDP
是否连接 面向连接 无连接
是否可靠 可靠传输,使用流量控制和拥塞控制 不可靠传输,使用流量控制和拥塞控制
连接对象个数 只能是一对一通信 支持一对一、一对多、多对一和多对多通信
传输方式 面向字节流 面向报文
首部开销 首部最小20字节,最大60字节 首部开销小,仅8字节
适用场景 适用于要求可靠传输的应用,例如文件传输 适用于实时应用(视频、直播等)

# TCP 的流量控制与拥塞控制

# 流量控制

流量控制是指如果发送者发送数据过快,接收者来不及丢失,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使接收者来得及接收。

流量控制的目的是防止分组丢失,它是构成TCP可靠性的一方面。

如何实现流量控制?

由滑动窗口协议(连续ARQ协议)实现,滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式是接收者返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送者的数据发送。

流量控制引发的死锁?怎么避免死锁的发生?

当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。 为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。

# 拥塞控制

拥塞控制是作用域网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。

拥塞控制的算法

  1. 慢开始算法
  2. 拥塞避免算法
  3. 快重传算法
  4. 快恢复算法